package com.minimalist.lindi.mapper;

import com.minimalist.common.entity.lindi.po.LindiContractTemplateField;
import com.minimalist.common.entity.lindi.vo.contracttemplatefield.LindiContractTemplateFieldQueryVO;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;

import java.util.List;

/**
 * 林地指标平台_合同模板字段表 映射层。
 *
 * @author 11987
 * @since 2025-05-31
 */
public interface LindiContractTemplateFieldMapper extends BaseMapper<LindiContractTemplateField>{

    /**
     * 根据ID查询合同模板字段
     *
     * @param contractTemplateFieldId 合同模板字段ID
     * @return 合同模板字段
     */
    default LindiContractTemplateField selectContractTemplateFieldByContractTemplateFieldId(Long contractTemplateFieldId){
        return selectOneByQuery(QueryChain.create().eq(LindiContractTemplateField::getContractTemplateFieldId, contractTemplateFieldId));
    }

    /**
     * 分页查询合同模板字段列表
     *
     * @param queryVO 查询条件
     * @return 分页结果
     */
    default Page<LindiContractTemplateField> selectPageContractTemplateFieldList(LindiContractTemplateFieldQueryVO queryVO){
        return paginate(queryVO.getPageNum(), queryVO.getPageSize(),
                QueryWrapper.create()
                        .eq(LindiContractTemplateField::getContractTemplateId, queryVO.getContractTemplateId())
                        .like(LindiContractTemplateField::getFieldName, queryVO.getFieldName())
                        .eq(LindiContractTemplateField::getFieldType, queryVO.getFieldType())
                        .eq(LindiContractTemplateField::getFieldRequire, queryVO.getFieldRequire())
                        .orderBy(LindiContractTemplateField::getSortOrder, true)
                        .orderBy(LindiContractTemplateField::getCreateTime, false));
    }

    /**
     * 根据合同模板ID查询字段列表
     *
     * @param contractTemplateId 合同模板ID
     * @return 字段列表
     */
    default List<LindiContractTemplateField> selectContractTemplateFieldListByContractTemplateId(Long contractTemplateId){
        return selectListByQuery(QueryChain.create()
                .eq(LindiContractTemplateField::getContractTemplateId, contractTemplateId)
                .orderBy(LindiContractTemplateField::getSortOrder, true)
                .orderBy(LindiContractTemplateField::getCreateTime, false));
    }

    /**
     * 根据合同模板ID删除合同模板字段
     *
     * @param contractTemplateId 合同模板ID
     */
    default void deleteContractTemplateFieldByContractTemplateId(Long contractTemplateId){
        deleteByQuery(QueryWrapper.create().eq(
                LindiContractTemplateField::getContractTemplateId, contractTemplateId));
    }
}
